home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / dev / e / cha_source.lha / cha_source / oss.e < prev    next >
Encoding:
Text File  |  1999-12-18  |  12.1 KB  |  280 lines

  1. /*==========================================================================+
  2. | oss.e                                                                     |
  3. | linkage with OSS                                                          |
  4. +--------------------------------------------------------------------------*/
  5.  
  6. OPT PREPROCESS,
  7.     MODULE
  8. OPT EXPORT
  9.  
  10. MODULE '*debug', 'other/nsm', 'other/nsm_extra'
  11.  
  12. /*-------------------------------------------------------------------------*/
  13.  
  14. DEF octabase
  15.  
  16. /*-------------------------------------------------------------------------*/
  17.  
  18. PROC oss(fstring, a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0)
  19.     DEF buffer[256] : STRING
  20.     StringF(buffer, fstring, a,b,c,d,e,f,g,h)
  21.     debug(['oss(\s)', buffer])
  22. ENDPROC nsm_sendrexx(buffer)
  23.  
  24. PROC ossv(fstring, a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0)
  25. ENDPROC Val(oss(fstring, a,b,c,d,e,f,g,h))
  26.  
  27. /*-------------------------------------------------------------------------*/
  28.  
  29. PROC oss_init(neednsm = TRUE)
  30.     DEF rexxport
  31.     Disable()
  32.     rexxport := FindPort('OCTAMED_REXX')
  33.     Enable()
  34.     IF rexxport = NIL THEN Throw("oss", 'OctaMED SoundStudio is not running')
  35.     IF neednsm
  36.         octabase := nsm_getoctabase()
  37.         IF octabase = NIL THEN Throw("oss",
  38.                             'nsm patched OctaMED SoundStudio is not running')
  39.         -> bug in nsm patch system means octabase isn't actually 0 if oss
  40.         -> hasn't been started after nsmport.  check for oss running means
  41.         -> that oss must have been started before nsmport in this case
  42.         IF octabase = $0000B00E THEN Throw("oss",
  43.                             'nsmport started after OctaMED SoundStudio')
  44.         debug(['octabase = \z\h[8]',octabase])
  45.     ENDIF
  46. ENDPROC
  47.  
  48. PROC oss_cleanup()
  49.     oss_updatedisplay()
  50.     nsm_freeresult()
  51. ENDPROC
  52.  
  53. /*-------------------------------------------------------------------------*/
  54.  
  55. PROC oss_updatedisplay(on = TRUE)
  56.     IF on
  57.         oss('ed_setdata_update on')
  58.         oss('ed_setdata_update')
  59.         oss('sa_refresh')
  60.     ELSE
  61.         oss('ed_setdata_update off')
  62.     ENDIF
  63. ENDPROC
  64.  
  65. /*-------------------------------------------------------------------------*/
  66.  
  67. PROC oss_samplebase(i) IS nsm_getsamplebase(octabase,i)
  68.  
  69. /*-------------------------------------------------------------------------*/
  70.  
  71. PROC oss_ed_inumtonumber(inum : PTR TO CHAR)
  72.     DEF m, n, l
  73.     l := StrLen(inum)
  74.     SELECT l
  75.     CASE 1
  76.         m := "0"
  77.         n := inum[0]
  78.     CASE 2
  79.         m := inum[0]
  80.         n := inum[1]
  81.     DEFAULT
  82.         RETURN 0
  83.     ENDSELECT
  84.     IF     m = "0"
  85.            m := 0
  86.     ELSEIF m = "1"
  87.            m := 1
  88.     ELSE
  89.         RETURN 0
  90.     ENDIF
  91.     IF     ("0" <= n) AND (n <= "9")
  92.            n := n - "0"
  93.     ELSEIF ("A" <= n) AND (n <= "V")
  94.            n := n - ("A" - 10)
  95.     ELSE
  96.         RETURN 0
  97.     ENDIF
  98. ENDPROC 32 * m + n
  99.  
  100. PROC oss_ed_numbertoinum(inum : LONG, to : PTR TO CHAR)
  101.     DEF m, n
  102.     m := Div(inum, 32)
  103.     n := Mod(inum, 32)
  104.     to[0] := 0
  105.     to[1] := 0
  106.     to[2] := 0
  107.     IF     m = 0
  108.         to[0] := "0"
  109.     ELSEIF m = 1
  110.         to[0] := "1"
  111.     ELSE
  112.         RETURN 0
  113.     ENDIF
  114.     IF     (0 <= n) AND (n <= 9)
  115.         to[1] := "0" + n
  116.     ELSEIF (10 <= n) AND (n <= 31)
  117.         to[1] := "A" + (n - 10)
  118.     ELSE
  119.         RETURN 0
  120.     ENDIF
  121. ENDPROC to
  122.  
  123. /*-------------------------------------------------------------------------*/
  124.  
  125. CONST CURRENT = -1
  126. PROC oss_ed_getblockname(block=CURRENT) IS nsm_getblockname(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block))
  127. PROC oss_ed_getcurrblock() IS nsm_getcurrblock(octabase)
  128. PROC oss_ed_getcurrline() IS nsm_getcurrline(octabase)
  129. PROC oss_ed_getcurrpage() IS nsm_getcurrpage(octabase)
  130. PROC oss_ed_getcurrtrack() IS nsm_getcurrtrack(octabase)
  131. PROC oss_ed_getdata_note(block=CURRENT, track=CURRENT, line=CURRENT) IS nsm_getnote(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line)
  132. PROC oss_ed_getdata_inum(block=CURRENT, track=CURRENT, line=CURRENT) IS nsm_getinum(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line)
  133. PROC oss_ed_getdata_cmdnum(block=CURRENT, track=CURRENT, line=CURRENT, page=CURRENT) IS nsm_getcmdnum(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line, IF page = CURRENT THEN nsm_getcurrpage(octabase) ELSE page)
  134. PROC oss_ed_getdata_cmdlvl(block=CURRENT, track=CURRENT, line=CURRENT, page=CURRENT) IS nsm_getcmdlvl(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line, IF page = CURRENT THEN nsm_getcurrpage(octabase) ELSE page)
  135. PROC oss_ed_getlinehighlight(line=CURRENT, block=CURRENT) IS nsm_getlinehighlight(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line)
  136. PROC oss_ed_getnumblocks() IS nsm_getnumblocks(octabase)
  137. PROC oss_ed_getnumlines(block=CURRENT) IS nsm_getnumlines(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block))
  138. PROC oss_ed_getnumpages(block=CURRENT) IS nsm_getnumpages(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block))
  139. PROC oss_ed_getnumtracks(block=CURRENT) IS nsm_getnumtracks(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block))
  140. PROC oss_ed_setlinehighlight_on(line=CURRENT, block=CURRENT) IS nsm_setlinehighlight(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line)
  141. PROC oss_ed_setlinehighlight_off(line=CURRENT, block=CURRENT) IS nsm_unsetlinehighlight(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line)
  142. PROC oss_ed_setdata_note(note, block=CURRENT, track=CURRENT, line=CURRENT) IS nsm_setnote(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line, note)
  143. PROC oss_ed_setdata_inum(inum, block=CURRENT, track=CURRENT, line=CURRENT) IS nsm_setinum(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line, inum)
  144. PROC oss_ed_setdata_cmdnum(cmdnum, block=CURRENT, track=CURRENT, line=CURRENT, page=CURRENT) IS nsm_setcmdnum(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line, IF page = CURRENT THEN nsm_getcurrpage(octabase) ELSE page, cmdnum)
  145. PROC oss_ed_setdata_cmdlvl(cmdlvl, block=CURRENT, track=CURRENT, line=CURRENT, page=CURRENT) IS nsm_setcmdlvl(IF block = CURRENT THEN nsm_getcurrblockbase(octabase) ELSE nsm_getblockbase(octabase, block), IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track, IF line = CURRENT THEN nsm_getcurrline(octabase) ELSE line, IF page = CURRENT THEN nsm_getcurrpage(octabase) ELSE page, cmdlvl)
  146. PROC oss_in_getdecay() IS nsm_getdecay(octabase, nsm_getcurrinstrument(octabase))
  147. PROC oss_in_getdefaultpitch() IS nsm_getdefaultpitch(octabase, nsm_getcurrinstrument(octabase))
  148. PROC oss_in_getdisable() IS nsm_getdisable(octabase, nsm_getcurrinstrument(octabase))
  149. PROC oss_in_getextendedpreset() IS nsm_getextendedpreset(octabase, nsm_getcurrinstrument(octabase))
  150. PROC oss_in_getfinetune() IS nsm_getfinetune(octabase, nsm_getcurrinstrument(octabase))
  151. PROC oss_in_gethold() IS nsm_gethold(octabase, nsm_getcurrinstrument(octabase))
  152. PROC oss_in_getlooppingpong() IS nsm_getlooppingpong(octabase, nsm_getcurrinstrument(octabase))
  153. PROC oss_in_getmidichannel() IS nsm_getmidichannel(octabase, nsm_getcurrinstrument(octabase))
  154. PROC oss_in_getmidipreset() IS nsm_getmidipreset(octabase, nsm_getcurrinstrument(octabase))
  155. PROC oss_in_getname() IS nsm_getinname(octabase, nsm_getcurrinstrument(octabase))
  156. PROC oss_in_getnumber() IS nsm_getcurrinstrument(octabase)
  157. PROC oss_in_getsuppressnoteoff() IS nsm_getsuppressnoteonoff(octabase, nsm_getcurrinstrument(octabase))
  158. PROC oss_in_gettranspose() IS nsm_gettranspose(octabase, nsm_getcurrinstrument(octabase))
  159. PROC oss_in_getvolume() IS nsm_getvolume(octabase, nsm_getcurrinstrument(octabase))
  160. PROC oss_rn_getrangeendline() IS nsm_getrangeendline(octabase)
  161. PROC oss_rn_getrangeendtrack() IS nsm_getrangeendtrack(octabase)
  162. PROC oss_rn_getrangestartline() IS nsm_getrangestartline(octabase)
  163. PROC oss_rn_getrangestarttrack() IS nsm_getrangestarttrack(octabase)
  164. PROC oss_rn_isranged() IS nsm_ranged(octabase)
  165. PROC oss_sa_getlooplength() IS nsm_getlooplength(octabase, nsm_getcurrinstrument(octabase))
  166. PROC oss_sa_getloopstart() IS nsm_getloopstart(octabase, nsm_getcurrinstrument(octabase))
  167. PROC oss_sa_getloopstate() IS nsm_getloopstate(octabase, nsm_getcurrinstrument(octabase))
  168. PROC oss_sa_getsamplelength() IS nsm_getsamplelength(nsm_getcurrsamplebase(octabase))
  169. PROC oss_sg_istrackon(track=CURRENT) IS nsm_trackon(octabase, IF track = CURRENT THEN nsm_getcurrtrack(octabase) ELSE track)
  170.  
  171. /*-------------------------------------------------------------------------*/
  172.  
  173. /*
  174. todo
  175.  
  176. ED_NOTETONUMBER
  177. ED_NUMBERTONOTE
  178. PROC oss_ed_setlinehighlight_toggle(line=-1, block=-1) IS EMPTY
  179. OP_GETKEYBOARDOCT
  180. octave      nsm_getcurroctave(octabase)
  181. PL_GETSTATE = STOPPED,PLAYSONG,PLAYBLOCK
  182. isplaying   nsm_playing(octabase)
  183. SA_GETSAMPLE O=OFFSET/N/A
  184. SA_SETSAMPLE O=OFFSET/N/A,V=VALUE/N/A
  185. sample      nsm_getsample(samplebase, offset)
  186.             nsm_setsample(samplebase, offset, sample)
  187.  
  188. */
  189.  
  190. /*
  191. octamed arexx commands not accessible via nsm, but should be
  192.  
  193. ED_GETCURRPLAYSEQ
  194. ED_GETCURRSECLIST
  195. ED_GETCURRSECTION
  196. ED_GETNUMPLAYSEQ
  197. ED_GETNUMSECLIST
  198. ED_GETNUMSECTIONS
  199. ED_GETPLAYSEQBLOCK O=OFFSET/N
  200. ED_GETSECLISTSECTION O=OFFSET/N
  201. ED_GETSECTIONNAME
  202. IN_GETNUMOCTAVES
  203. IN_GETOUTPUT
  204. IN_GETTYPE = EMPTY,SAMPLE,SYNTH,HYBRID,EXTSAMPLE,SAMPLE16,UNKNOWN
  205. IN_ISSLOTUSED SL=SLOT/N
  206. IN_ISSTEREO
  207. MM_GETCURRMSGNUM
  208. OP_GET OPT/A
  209. OP_SET OPT/A,VAL/N,ON/S,OFF/S,TOGGLE/S
  210. OP_SETKEYBOARDOCT OCT/N,FKEY/K/N
  211. OP_TOGGLEBETWEEN OPT/A,VAL1/N/A,VAL2/N/A
  212. OP_UPDATE ON/S,OFF/S
  213. RN_BUFFEREXISTS BUFF/N/A
  214. RN_GETBUFFDATA BUFF/N/A,L=LINE/K/N/A,T=TRACK/K/N/A,P=PAGE/K/N,NOTE/S,INUM/S,CMDNUM=CMDTYPE/S,QUAL=CMDLVL/S
  215. RN_GETBUFFLINES BUFF/N/A
  216. RN_GETBUFFPAGES BUFF/N/A
  217. RN_GETBUFFTRACKS BUFF/N/A
  218. RN_SETBUFFDATA BUFF/N/A,L=LINE/K/N/A,T=TRACK/K/N/A,P=PAGE/K/N,NOTE/K/N,INUM/K/N,CMDNUM=CMDTYPE/K/N,QUAL=CMDLVL/K/N
  219. SA_GETBUFFERLENGTH
  220. SA_GETDISPLAYCHANNEL = LEFT,RIGHT,BOTH
  221. SA_GETDISPLAYSIZE
  222. SA_GETDISPLAYSTART
  223. SA_GETRANGEEND
  224. SA_GETRANGESTART
  225. SG_GETANNOSTRING
  226. SG_GETCHANNELMODE (9 = mixing)
  227. SG_GETCURRENTSONGNUMBER
  228. SG_GETFILTER
  229. SG_GETHQ
  230. SG_GETMASTERVOL
  231. SG_GETNAME
  232. SG_GETNUMBEROFSONGS
  233. SG_GETPLAYTRANSPOSE
  234. SG_GETSLIDEMODE
  235. SG_GETTEMPO
  236. SG_GETTEMPOLPB
  237. SG_GETTEMPOMODE = SPD,BPM
  238. SG_GETTEMPOTPL
  239. SG_GETTRACKPAN TRACK/N/A
  240. SG_GETTRACKVOL TRACK/N/A
  241. SG_GETVOLMODE = HEX,DEC
  242. SG_ISMODIFIED
  243. SG_ISTRACKSELECTED TRK=TRACK/N
  244. SY_GETNUMBEROFWAVES
  245. SY_GETPROGCOMMAND O=OFFSET/N/A,VOL/S,WF/S
  246. SY_GETPROGCURSORX
  247. SY_GETPROGLENGTH VOL/S,WF/S
  248. SY_GETPROGLINE
  249. SY_GETPROGSPEED VOL/S,WF/S
  250. SY_GETSAMPLE O=OFFSET/N/A
  251. SY_GETSELECTEDWAVE
  252. SY_GETWAVELENGTH
  253. SY_GETWAVENUM
  254. SY_SETSAMPLE O=OFFSET/N/A,V=VALUE/N/A
  255. VE_OCTAMED
  256. VE_OCTAMEDREXX
  257. WI_ISOPEN WINDOW/A
  258. */
  259.  
  260. /*
  261. nsm commands not accessible via octamed arexx
  262.  
  263. resultstr   nsm_sendrexx(commandstr)
  264.             nsm_freeresult()
  265. bool        nsm_resultstringfalse(str)
  266. bool        nsm_resultstringtrue(str)
  267.             nsm_updateeditor(blockbase)
  268. octabase    nsm_getoctabase()
  269. blockbase   nsm_getblockbase(octabase,block)
  270. blockbase   nsm_getcurrblockbase(octabase)
  271. samplebase  nsm_getcurrsamplebase(octabase)
  272.             nsm_setmed(part, blockbase, track, line, page, data)
  273. data        nsm_getmed(part, blockbase, track, line, page)
  274. subpos      nsm_getsubpos(octabase)
  275. */
  276.  
  277. /*--------------------------------------------------------------------------+
  278. | END: oss.e                                                                |
  279. +==========================================================================*/
  280.